import time

from playwright.sync_api import sync_playwright

# 同步
# p = sync_playwright().start()  不会自动退出资源，推荐用下面这种
with sync_playwright() as p:
    browser = p.chromium.launch(headless=False, args=["--start-maximized"])
    # context = browser.new_context(no_viewport=True)

    # page = browser.new_page()
    # page.goto('http://www.baidu.com')
    # print(page.title)

    # 上下文
    user_context = browser.new_context(no_viewport=True)
    # 新页面 打开页面
    # user_context.new_page().goto("https://blog.csdn.net")
    user_page = user_context.new_page()
    user_page.goto("http://localhost:88/test/toPage?")
    # print('页面源码'+user_page.content())
    # user_page.reload() # 刷新页面

    # 事件监听机制
    # 监听控制台日志
    def handle_console(msg):
        if msg.text != "hhh":
            print(f'dddd{msg}')
            # 在页面中执行 alert
            user_page.evaluate("alert('哈哈')")

    user_page.on("console", handle_console)
    # 处理弹窗
    user_page.on("dialog", lambda dialog: dialog.accept())
    def handleReq(request):
        print(f'请求信息：》》{request.method},{request.url}')
    user_page.on('request',handleReq)
    user_page.on('response',lambda response:print(f'请求信息：》》{response.status},{response.url}'))

    # user_page.screenshot(path='./截图.png') #截图
    # 元素截图
    user_page.locator('#formContainer').screenshot(path='./element.png')
    # 执行js代码
    user_page.locator('#login > header > h1').evaluate('ele=>ele.innerText="哈哈哈"')

    # iframe 操作
    user_page.frame(name='baidu').locator('#kw').fill('新年好')
    # user_page.frame_locator()
    #---------------
    def close_popup():
        if user_page.get_by_text("Close").is_visible():
            user_page.get_by_text("Close").click()
            print("弹窗已关闭")
            return True  # 返回 True 表示处理成功
        return False
    # 监听所有包含 "Close" 文本的元素
    user_page.add_locator_handler(
        user_page.get_by_text("Close", exact=True),  # 精确匹配文本
        close_popup,
        times=2  # 最多处理 2 次
    )
    #===========



    # 选中input  中name=wd的元素
    user_page.fill("input[name='wd']","周")
    time.sleep(1)
    user_page.locator("input[name='wd']").clear()
    user_page.locator("input[name='wd']").fill('周纯彬')
    # 双击
    # user_page.locator("input[name='wd']").dblclick(button="right")
    mouseHover = user_page.locator("#sel")
    mouseHover.click()
    user_page.wait_for_timeout(1000)
    # 使用 select_option 方法直接选择第二个选项
    user_page.locator("#sel").select_option(index=1)
    #下拉
    is_v = user_page.locator('#app > div.el-dropdown > span').is_visible()
    print(f'是否可见：{is_v}')
    user_page.locator('#app > div.el-dropdown > span').hover()
    time.sleep(1)
    is_v2 = user_page.locator('//li[text()="狮子头"]').is_visible()
    print(f'下拉选项可见否:{is_v2}')

    # 获取所有匹配的定位
    li_all = user_page.locator('//li').all()
    for li in li_all:
        print('li标签内的文字：'+li.inner_text())
    print('第一个li：'+str(user_page.locator('//li').first))
    print('最后一个li：'+str(user_page.locator('//li').last))
    print('第二个li：'+str(user_page.locator('//li').nth(1)))
    link_a = user_page.locator('//a')

    print(f'a标签的数量{link_a.count()}')
    for a in link_a.all():
        print(f'a标签的href：{a.get_attribute("href")}')

    user_page.wait_for_timeout(1000)
    # 定位器 css选择器
    user_page.locator("input[name='pw']").fill('123')

    # 单选框
    user_page.locator('//*[@id="app"]/label[2]/span[2]').set_checked(True)
    user_page.locator('//*[@id="app"]/label[2]/span[2]').click()

    # 上传文件
    user_page.locator('input[name="file"]').set_input_files('C:\\Users\\zhou\\Desktop\\login.ui')


    # 拖拽
    user_page.drag_and_drop('#app > a','#login > section > label:nth-child(1) > input[type=text]')
    user_page.wait_for_timeout(2000)
    user_page.locator('#app > a').drag_to(user_page.locator('//*[@id="pw"]'))
    time.sleep(1)
    #移动鼠标
    # user_page.mouse.down(button='right')
    user_page.mouse.move(200,200)


    # 键盘
    user_page.locator('#login > section > label:nth-child(1) > input[type=text]').focus()
    user_page.keyboard.press('Control+A')
    user_page.keyboard.press('Delete')
    user_page.keyboard.type('zhouchunbin')

    time.sleep(2)
    # 点击按钮
    user_page.locator("//*[@id='login']/section/button").click()
    print(f'标题{user_page.title()}')
    # user_page.go_back() #上一页
    # user_page.go_forward() # 下一页
    # user_page.wait_for_timeout(5000)

    time.sleep(2)
    browser.close()
